iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
0
Modern Web

Django案例實作之踩坑全記錄系列 第 11

Django - 資料庫互動

  • 分享至 

  • xImage
  •  

Django提供一個API作為與資料庫的接口,只要進入shell輸入指令就可以來操作資料庫了。

python3 manage.py shell

一、新增資料

>>> from quiz.models import Question, Choice # 匯入model
>>> Question.objects.all() # 列出資料庫的所有列
<QuerySet []> # 結果表示目前還沒有任何資料

>>> q = Question(question_text="哈利波特中,普等巫測成績等級最高的是?") # 新增資料列
>>> q.save() # 完成這一步才算儲存
>>> q.id
1 # Django本身內建id欄位
>>> q.question_text
"哈利波特中,普等巫測成績等級最高的是?"
>>> q.question_text = "佛地魔的本名是?" # 更改資料
>>> q.save()
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>

OK,這樣根本看不出來它是誰,需要幫models.py加點東西:

from django.db import models

class Question(models.Model):
    # ...
    def __str__(self):
        return self.question_text

class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text

再跑一次:

<QuerySet [<Question: 佛地魔的本名是?>]>

二、新增一對多的資料

新增題目選項:

>>> q = Question.objects.get(pk=1) # pk:primary_key,由於我們在models.py並沒有指定其他欄位為主鍵,Django本身默認id為主鍵,固代入id=1也可以。
>>> q.choice_set.all() # 得到該Question相關的Choice
<QuerySet []> # 還沒有新增所以得到一個空的list

>>> c = q.choice_set.create(choice_text='Tom Marvolo Riddle', score=10)
>>> c.question # Choice所屬的Question
<Question: 佛地魔的本名是?>

# 繼續新增Choice
>>> q.choice_set.create(choice_text='Tom Marvilo Riddle', score=0)
>>> q.choice_set.create(choice_text='Tom Marvin Riddle', score=0)
>>> q.choice_set.create(choice_text='Tom Ravolo Riddle', score=0)
>>> q.choice_set.all()
<QuerySet [<Choice: Tom Marvolo Riddle>, <Choice: Tom Marvilo Riddle>, <Choice: Tom Marvin Riddle>, <Choice: Tom Ravolo Riddle>]>

上一篇
資料模型重置方法fake - 實例
下一篇
Django - Admin
系列文
Django案例實作之踩坑全記錄34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言